/*
* Copyright © Shanghai Awinic Technology Co., Ltd. 2020-2020. All rights reserved.
* Description: The header file of the sys related driver library.
* Date： 20201126
* Awinic_Version： aw_soc_driver_v1.0.0
*/
#include "compile_option.h"
#ifdef AW_86802

#ifndef __AW8680X_SYS_H
#define __AW8680X_SYS_H

/* Include ------------------------------------------------------------------*/
#include "aw8680x_def.h"

/* clk define */
#ifdef SYS_CLOCK
#define AW_SYS_CLOCK  SYS_CLOCK // 24M
#else
#define AW_SYS_CLOCK (24000000) // 24M
#endif
/* end */

/* system define */
#define CFG_LOSC_EN				((AW_U32)0x00000001)
#define CFG_EOSC_EN				((AW_U32)0x00000002)
#define CFG_BIAS_EN				((AW_U32)0x00000004)
#define CFG_HOSC_EN				((AW_U32)0x00000001)
#define CFG_HOSC_24M_MOD		((AW_U32)0x00000000)
#define CFG_CLK_EN				((AW_U32)0x00000001)
#define CFG_CLK_DIS				(~CFG_CLK_EN)
#define CFG_HDIV_EN				((AW_U32)0x00000001)
#define CLEAN_DATA				(0U)
/* end */

/* FLASH Keys */
#define PROTECT_FKEY0			((AW_U8)0x00)	/*!< Flash program erase key0 */
#define PROTECT_FKEY1			((AW_U8)0x41)	/*!< Flash program erase key1 */
#define PROTECT_FKEY2			((AW_U8)0x57)	/*!< Flash program erase key2 */
#define PROTECT_FKEY3			((AW_U8)0x49)	/*!< Flash program erase key3 */
#define PROTECT_FKEY4			((AW_U8)0x43)	/*!< Flash program erase key4 */
#define PROTECT_UNLOCK			((AW_U32)0x00)
#define PROTECT_LOCK			((AW_U32)0x01)
/* end */

/* pin mux define */
#define GPIO_PIN_MUX_FLAG		((AW_U32)0x01)
/* end */

/* gpio define */
#define GPIO_PA_OUT_FLAG		((AW_U32)0xC00F)
#define GPIO_OD_IN_FLAG			((AW_U32)0x3FFF)
/* end */

/* wdt define */
#define WDT0_RST_EN			((AW_U32)0x00000004)
#define WDT1_RST_EN			((AW_U32)0x00000002)
/* end */

void system_init(void);
#ifndef AWINIC_IAR
RET_STATUS_E protect_unlock(void);
RET_STATUS_E protect_lock(void);
#else
__ramfunc RET_STATUS_E protect_unlock(void);
__ramfunc RET_STATUS_E protect_lock(void);
#endif

void i2c_clk_init(void);
void i2c_close_clk(void);
void flash_clk_init(void);
void uart_clk_init(void);
void timer0_clk_init(void);
void timer1_clk_init(void);
void adc_clk_init(AW_U32 adc_clkdiv);
void afe_clk_init(void);
void wdt0_clk_init(void);
void wdt1_clk_init(void);
void crc_clk_init(void);
void hdiv_clk_init(void);
void gpio_clk_init(void);
void i2c_pmux_init(void);
void uart_pmux_init(AW_U8 gpio_pin_rx, AW_U8 gpio_pin_tx);
void gpio_pmux_init(AW_U32 pin_mux_pa);
void gpio_od_config_en(AW_U32 gpio_num);
void gpio_pa_config_en(AW_U32 gpio_pin);
void gpio_speed_fast(AW_U32 gpio_pin);
void gpio_speed_slow(AW_U32 gpio_pin);

void wdt0_rst_en(void);
void wdt1_rst_en(void);
void system_set_vtor(AW_U32 vtor_data);
void i2c_close_device(void);

#endif
#endif
